# 函数多返回值-------------------------------------------------------------
def test_return():
    return 1, 2
x, y = test_return()    # x接收1，y接收2

# 函数多种传参方式-------------------------------------------------------------
def user_info(name, age, gender):
    print(f"你的名字是：{name}，年龄为：{age}，性别为：{gender}")
t_name = "chen"
t_age = 18
t_gender = "m"

# 1.位置传参
user_info(t_name, t_age, t_gender)

# 2.关键字传参
user_info(name=t_name, age=t_age, gender=t_gender)
user_info(name=t_name, gender=t_gender, age=t_age)  # 顺序可以与声明时不一样

# 3.缺省传参
# 在定义函数的时候，给形参设置一个默认值
def test_info(name, age, gender='male'):
    print(f"你的名字是：{name}，年龄为：{age}，性别为：{gender}")
test_info('chen', 20)

# 4.不定长传参
# 位置传参的不定长形式，即参数的个数位置，会统一接收在一个元组（tuple）中
def user_info(*args):
    print(args)
user_info('eleven', 22, "hello")

# 关键字传参的不定长形式，参数形式为键值对，相当于给传入的参数值（value）赋给一个变量（key），会接收在一个字典中
def user_info2(**kwargs):
    print(kwargs)
user_info2(name='elechen', age=17, word='good!')

# 匿名函数-------------------------------------------------------------
# 函数作为参数传递
def add(a, b):
    return a + b
def demo_print(add):    # 即把add()函数传进来后，在demo_print()函数中就可以使用add()函数的功能了
    r1 = add(1, 2)      # 暂时不知道用处，因为在当前的例子中，不传递函数也可以使用改函数的功能
    print(r1)
demo_print(add)

# lambda匿名函数
def test_func(compute):
    result = compute(1, 2)
    print(result)

test_func(lambda x, y: x * y)